package com.cwnu.sw.cys.core.common.exception;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author jisam
 * @version 1.0
 * @contact "jisamchan@outlook.com"
 * @date 24/03/2025
 * @description 通用错误枚举类
 * 实现了ErrorEnum接口，用于定义系统中常见的错误类型。
 * 每个枚举实例代表一种特定的错误，包含错误码和错误信息。
 */
@AllArgsConstructor
@Getter
public enum CommonErrorEnum implements ErrorEnum {


    /**
     * 系统错误，通常表示系统内部发生了未知的异常。
     */
    SYSTEM_ERROR(-1, "系统出小差了，请稍后再试哦~~"),

    /**
     * 参数校验失败，通常表示客户端传递的参数不符合要求。
     * {0} 为占位符，可以在实际使用时替换为具体的错误信息。
     */
    PARAM_VALID(-2, "参数校验失败{0}"),

    /**
     * 请求频率限制，通常表示客户端请求过于频繁，超出了系统的限制。
     */
    FREQUENCY_LIMIT(-3, "请求太频繁了，请稍后再试哦~~"),

    /**
     * 锁限制，通常表示由于并发请求过多，系统对某些资源进行了锁定。
     */
    LOCK_LIMIT(-4, "请求太频繁了，请稍后再试哦~~"),

    /**
     * BUSINESS_ERROR 是一个常量，用于表示业务错误。
     * 该常量包含两个部分：
     * 1. 错误代码：0，表示业务错误的代码。
     * 2. 错误信息模板："{0}"，表示错误信息的模板，其中 {0} 是一个占位符，可以在运行时替换为具体的错误信息。
     */
    BUSINESS_ERROR(0,"{0}");

    /**
     * 错误码，用于唯一标识一种错误类型。
     */
    private final Integer code;

    /**
     * 错误信息，用于描述错误的详细信息。
     */
    private final String msg;

    /**
     * 获取当前枚举实例的错误码。
     *
     * @return 返回当前枚举实例的错误码。
     */
    @Override
    public Integer getErrorCode() {
        return this.code;
    }

    /**
     * 获取当前枚举实例的错误信息。
     *
     * @return 返回当前枚举实例的错误信息。
     */
    @Override
    public String getErrorMsg() {
        return this.msg;
    }
}
